/**
 * 
 */
package com.study.lock.demo;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 同步方法    即有synchronized关键字修饰的方法。 
 * 同步是一种高开销的操作，因此应该尽量减少同步的内容。通常没有必要同步整个方法，使用synchronized代码块同步关键代码即可。。
 * @author Administrator
 * @date 2019年6月11日
 */
public class Bank2 {

	private volatile int count =0;//账户余额
	//volatile关键字为域变量的访问提供了一种免锁机制， 
	////因为volatile不能保证原子操作导致的，因此volatile不能代替synchronized。
	//此外volatile会组织编译器对代码优化，因此能不使用它就不适用它吧。它的原理是每次要线程要访问volatile修饰的变量时都是从内存中读取，而不是存缓存当中读取，因此每个线程访问到的变量值都是一样的。这样就保证了同步。

	 //存钱
    public  void addMoney(int money){
    	try {
    		count +=money;
            System.out.println(System.currentTimeMillis()+"存进："+money);
		} finally {
		}
        
    }
    
    //取钱
    public void subMoney(int money){
        try {
        	if(count-money < 0){
                System.out.println("余额不足");
                return;
            }
            count -=money;
            System.out.println(+System.currentTimeMillis()+"取出："+money);
		} finally {
			
		}
    }
    
    //查询
    public void lookMoney(){
        System.out.println("账户余额："+count);
    }
}